學過資料結構的朋友一定不陌生,queue 是一種先進先出的資料結構。
而 Laravel 的 queue job 是一個類似待辦清單的功能,以 queue 的方式儲存待辦的任務 (job),然後會有小精靈依序幫你執行 X)
queue job 可以分成兩塊工作來看,一是把任務排進隊伍裡、二是執行任務;算是一個生產者消費者的模型。
新增一個 job class,在 handle 方法裡寫這個 job 具體要做的事。詳細請參閱官方文件
$ php artisan make:job JOB_NAME
新增一個 job 到隊伍裡:
// This job is sent to the default connection's default queue...
MyJobClass::dispatch();
// This job is sent to the default connection's "emails" queue...
MyJobClass::dispatch()->onQueue('emails');
dispatch
底層其實是把任務 push
到 driver
。
做 push
前,系統會先去看要推送到哪個 driver
,driver
就是我們排隊的地方,可以是資料庫、Redis 等。有哪些 driver
和連線參數可以在config/queue.php
設定。
知道是要 push
到哪個 driver
後,會去看這個 driver
是否已建立連線;有就用,沒有就建立,最後才 push job 到 driver
// 這兩個應該會是一樣的
Queue::connection('Database')->push(new MyJobClass());
MyJobClass::dispatch()->onQueue('Database');
如果沒有指定 driver,Laravel 會採用預設的 driver (config/queue.php['default']
)
Queue::push(new MyJobClass());
讓小精靈開始工作的咒語
$ php artisan queue:work